package com.wxp.demo06.shopping.application;

import android.app.Application;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;

import androidx.annotation.NonNull;

import com.wxp.demo06.shopping.db.ShoppingDBHelper;
import com.wxp.demo06.shopping.entity.GoodsInfoEntity;
import com.wxp.demo06.util.FileUtil;
import com.wxp.demo06.util.LogUtils;
import com.wxp.demo06.util.SharedUtil;

import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;

/**
 * 商城全局共享类
 */
public class ShoppingApplication extends Application {

    /**
     * 定义单例操作对象
     */
    private static ShoppingApplication mApp;
    /**
     * 声明一个公共的信息映射对象，可当作全局变量使用
     */
    public HashMap<String, String> infoMap = new HashMap<>();

    /**
     * 购物车中的商品总数量
     */
    public int goodsCount;

    /**
     * 获取App实例对象
     *
     * @return App实例对象
     */
    public static ShoppingApplication getInstance() {
        return mApp;
    }

    /**
     * 在App启动时调用
     */
    @Override
    public void onCreate() {
        super.onCreate();
        mApp = this;
        LogUtils.debug("在App启动时调用 " + ShoppingApplication.class.getSimpleName(), " onCreate");

        // 初始化商品信息
        initGoodsInfo();
    }

    private void initGoodsInfo() {
        // 获取共享参数保存的是否首次打开参数
        boolean isFirst = SharedUtil.getInstance(this).readBoolean("first", true);
        // 获取当前App的私有下载路径
        String directory = Objects.requireNonNull(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)).toString() + File.separatorChar;
        if (isFirst) {
            // 模拟网络图片下载
            List<GoodsInfoEntity> list = GoodsInfoEntity.getDefaultList();
            for (GoodsInfoEntity info : list) {
                Bitmap bitmap = BitmapFactory.decodeResource(getResources(), info.pic);
                String path = directory + info.id + ".jpg";
                // 往存储卡保存商品图片
                FileUtil.saveImage(path, bitmap);
                // 回收位图对象
                bitmap.recycle();
                info.picPath = path;
            }
            // 打开数据库，把商品信息插入到表中
            ShoppingDBHelper dbHelper = ShoppingDBHelper.getInstance(this);
            dbHelper.openWriteLink();
            dbHelper.insertGoodsInfos(list);
            dbHelper.closeLink();
            // 把是否首次打开写入共享参数
            SharedUtil.getInstance(this).writeBoolean("first", false);
        }
    }

    /**
     * 在App终止时调用
     */
    @Override
    public void onTerminate() {
        super.onTerminate();
        LogUtils.debug("在App终止时调用", "onTerminate");
    }

    /**
     * 在配置改变时调用，例如：从竖屏变为横屏
     */
    @Override
    public void onConfigurationChanged(@NonNull Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        LogUtils.debug("在配置改变时调用", "onConfigurationChanged");
    }


}
